Micron Document
<!DOCTYPE html>
<html class="client-nojs vector-feature-language-in-header-enabled vector-feature-language-in-main-page-header-disabled vector-feature-page-tools-pinned-disabled vector-feature-toc-pinned-clientpref-0 vector-toc-not-available vector-feature-main-menu-pinned-disabled vector-feature-limited-width-clientpref-1 vector-feature-limited-width-content-enabled vector-feature-custom-font-size-clientpref-1 vector-feature-appearance-pinned-clientpref-0 vector-feature-night-mode-enabled skin-theme-clientpref-os vector-sticky-header-enabled" lang="fr" dir="ltr"><head>
<meta charset="UTF-8">
<title>Java2D</title>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link rel="icon" type="image/png" href="./_res_/favicon.png">
<link rel="canonical" href="https://fr.wikipedia.org/wiki/Java2D"> <link href="./_mw_/ext.wikimediamessages.styles.css" rel="stylesheet" type="text/css">
<link href="./_mw_/skins.vector.icons.css" rel="stylesheet" type="text/css">
<link href="./_mw_/skins.vector.search.codex.styles.css" rel="stylesheet" type="text/css">
<link href="./_mw_/skins.vector.styles.css" rel="stylesheet" type="text/css">
<meta name="ResourceLoaderDynamicStyles" content="">
<link rel="stylesheet" type="text/css" href="./_mw_/site.styles.css">
<link rel="stylesheet" type="text/css" href="./_mw_/noscript.css">
<link rel="stylesheet" type="text/css" href="./_res_/footer.css">
<link rel="stylesheet" type="text/css" href="./_res_/vector-2022.css">
</head>
<body class="skin--responsive skin-vector skin-vector-search-vue mediawiki ltr sitedir-ltr mw-hide-empty-elt ns-0 ns-subject page-Java2D rootpage-Java2D skin-vector-2022 action-view">
<div class="mw-page-container">
<div class="mw-page-container-inner">
<div class="mw-content-container">
<main id="content" class="mw-body">
<header class="mw-body-header vector-page-titlebar">
<h1 id="firstHeading" class="firstHeading mw-first-heading"><span class="mw-page-title-main">Java2D</span></h1>
</header>
<a id="top"></a>
<div id="bodyContent" class="vector-body ve-init-mw-desktopArticleTarget-targetContainer" aria-labelledby="firstHeading" data-mw-ve-target-container="">
<div id="contentSub">
<div id="mw-content-subtitle"></div>
</div>
<div id="mw-content-text" class="mw-body-content mw-content-ltr" lang="fr" dir="ltr"><div class="mw-content-ltr mw-parser-output" lang="fr" dir="ltr"><p><b>Java2D</b> est une <a href="Biblioth%C3%A8que_graphique" title="Bibliothèque graphique">bibliothèque graphique</a> de bas niveau pour <a href="Langage_de_programmation_Java" class="mw-redirect" title="Langage de programmation Java">Java</a>, faisant partie à la fois de <a href="Java_Foundation_Classes" title="Java Foundation Classes">JFC</a> et de Java Media. Cette bibliothèque est le fruit d’une collaboration entre <a href="Sun_Microsystems" title="Sun Microsystems">Sun Microsystems</a> et <a href="Adobe_Systems" class="mw-redirect" title="Adobe Systems">Adobe Systems</a> pour pallier les manques et déficiences de l'<a href="Abstract_Window_Toolkit" title="Abstract Window Toolkit">AWT</a>. Tant la pile d’exécution de Java2D que ses commandes offrent d’ailleurs une grande similarité avec le langage de rendu <a href="PostScript" title="PostScript">PostScript</a>.
</p><p>Java2D permet de tracer toutes sortes de figures géométriques en 2 dimensions. En effet chaque opération Java2D peut se résumer en un remplissage d'une forme avec une peinture suivi de sa composition sur l’écran (voir le chapitre <i><a href="#Destination">Destination</a></i>).
</p>

<div class="mw-heading mw-heading2"><h2 id="Concepts_de_base">Concepts de base</h2></div>
<p>Ces objets sont les composants de base de presque toutes les opérations Java2D.
</p>
<div class="mw-heading mw-heading3"><h3 id="Formes_(Shape)"><span id="Formes_.28Shape.29"></span>Formes (<i>Shape</i>)</h3></div>
<p>Une forme en Java2D peut être interprétée comme étant une frontière infiniment fine définissant un <i>dehors</i> et un <i>dedans</i>. Les <a href="Pixel" title="Pixel">pixels</a> dans la forme sont affectés par les opérations de rendu alors que ceux situés à l'extérieur ne le sont pas.
</p><p>Remplir un segment infiniment fin donnerait un résultat où aucun pixel n'est modifié étant donné que l'on peut considérer qu'une telle forme ne contient aucun pixel. De ce fait, un rectangle de faible épaisseur doit être utilisé pour que la forme puisse contenir des pixels.
</p>
<div class="mw-heading mw-heading3"><h3 id="Peinture_(Paint)"><span id="Peinture_.28Paint.29"></span>Peinture (<i>Paint</i>)</h3></div>
<p>Une peinture génère les couleurs qui doivent être utilisées pour chaque pixel lors des opérations de remplissage (ou <i>fill</i>). La peinture la plus simple est définie par la classe <i>java.awt.Color</i>, qui génère la même couleur pour tous les pixels. Des peintures plus complexes peuvent produire des gradients, des images ou n'importe quelle autre combinaison de couleurs. Remplir une forme circulaire en utilisant la couleur opaque jaune produira un cercle opaque jaune&nbsp;; tandis que le fait de remplir cette même forme avec peinture générant une image produira un découpage circulaire de cette même image.
</p>
<div class="mw-heading mw-heading3"><h3 id="Compositions_(Composites)"><span id="Compositions_.28Composites.29"></span>Compositions (<i>Composites</i>)</h3></div>
<p>Pour chaque opération de dessin, on peut identifier une source (les pixels qui sont produits par la peinture) et une destination (les pixels déjà présents sur l’écran). En temps normal les pixels sources recouvrent tout simplement les pixels destination&nbsp;; cependant certaines composites permettent de changer ce comportement.
</p><p>Une composite, étant donné les pixels sources et destination, produit un résultat qui sera contenu sur l’écran. La composite la plus couramment utilisée est définie par la classe <i>java.awt.AlphaComposite</i>, qui permet de traiter le dessin de pixels partiellement transparents, ce qui permet de voir les pixels de la destination plus ou moins à travers les pixels sources. Cette composite implémente les règles de Porter et Duff.
</p>
<div class="mw-heading mw-heading3"><h3 id="Remplissage_(Filling)"><span id="Remplissage_.28Filling.29"></span>Remplissage (<i>Filling</i>)</h3></div>
<p>Pour remplir une forme, la première étape est d'identifier quels pixels sont à l'intérieur de cette forme. Ces pixels seront ceux affectés par l'opération de remplissage. Les pixels qui sont partiellement à l’extérieur ou partiellement à l’intérieur seront également affectés selon que l’<a href="Anticr%C3%A9nelage" title="Anticrénelage">anticrénelage</a> est activé ou pas.
</p><p>La peinture doit alors générer la couleur de chacun des pixels devant être peints. Dans le cas courant de l’utilisation d’une couleur opaque, chaque pixel sera mis à la même couleur.
</p><p>La composition prend alors les pixels générés par la peinture et les combine avec ceux déjà présents sur l’écran pour créer le résultat final.
</p>
<div class="mw-heading mw-heading2"><h2 id="Objets_avancés"><span id="Objets_avanc.C3.A9s"></span>Objets avancés</h2></div>
<p>Ces objets ainsi que leur comportement peuvent être décomposés en objets simples comme ceux décrits dans le paragraphe précédents.
</p>
<div class="mw-heading mw-heading3"><h3 id="Transformations_(Transform)"><span id="Transformations_.28Transform.29"></span>Transformations (<i>Transform</i>)</h3></div>
<p>Chaque opération Java2D peut être l’objet d’une transformation, faisant que les formes peuvent être translatées, tournées, inclinées voir agrandies ou rétrécies au moment de leur rendu. La transformation la plus courante est la transformation identitaire ou identité qui ne fait rien.
</p><p>Effectuer un remplissage avec une transformation peut être simplement vu comme la création d’une nouvelle forme transformée et le remplissage de cette même forme.
</p>
<div class="mw-heading mw-heading3"><h3 id="Tracé_(Stroke)"><span id="Trac.C3.A9_.28Stroke.29"></span>Tracé (<i>Stroke</i>)</h3></div>
<p>En plus des opérations de remplissage, Java2D permet de faire des opérations de tracé. Alors que le remplissage dessine l’intérieur d’une forme, le tracé en dessine le contour. Ce contour peut simplement apparaitre comme une ligne fine voire sous des formes plus complexes telles qu’une succession de tirets de bouts arrondis.
</p><p>L’objet responsable de la création de la bordure est un trait ou <i>Stroke</i>. À partir d'une forme source donnée, le trait produira une nouvelle forme représentant le contour de la première. Par exemple une ligne infiniment fine peut donner comme contour un rectangle d’une épaisseur de un pixel.
</p><p>Un tracé peut donc être décrit comme la création d’une nouvelle forme suivie de son remplissage.
</p><p>Techniquement parlant, la seule chose dont on requiert d’un tracé, c’est d’accepter une forme en entrée et d’en produire une autre en retour. L’implémentation d’un trait fournie avec Java2D (<i>java.awt.BasicStroke</i>) suit la règle précédemment décrite&nbsp;; cependant un trait personnalisé pourrait, en théorie, produire n’importe quel type de forme suivant les besoins.
</p>
<div class="mw-heading mw-heading2"><h2 id="Optimisations">Optimisations</h2></div>
<p>Conceptuellement, dessiner un segment noir en Java2D reviendrai à créer un segment, le transformer suivant la transformation courante, générer son tracé ce qui a pour effet de créer un rectangle de fine épaisseur, identifier sur cette forme les pixels affectés par le remplissage puis les générer avec la couleur <i>java.awt.Color.BLACK</i> et enfin composer le résultat sur l’écran.
</p><p>Cependant effectuer toute cette séquence d'étapes pour chaque opération de dessin est totalement inefficace. Java2D se permet donc d’optimiser certaines opérations basiques de dessin de manière à sauter ou éviter certaines étapes. Si le dessin utilise une couleur opaque, il n’est pas alors nécessaire de créer une liste complète des couleurs à produire. De même si une composite sans support de la transparence est utilisée, demander le calcul du résultat de cette composition est futile et serait une dépense inutile de temps processeur.
</p><p>Java 2D fait donc dans tous les cas la somme minimale de travail nécessaire pour achever un résultat similaire à un traitement complet&nbsp;; ceci lui permet d’avoir à la fois une grande flexibilité et de bonnes performances.
</p>
<div class="mw-heading mw-heading2"><h2 id="Destination">Destination</h2></div>
<p>Pour simplifier l’exposé, cet article a présumé que le rendu était destiné à être produit sur un écran. Cependant la surface de rendu finale peut être de toute autre nature comme, par exemple, une imprimante, une image en mémoire ou même n’importe quel objet qui accepterait des commandes Java2D et les traduirait en commandes pour générer un format quelconque d'<a href="Image_num%C3%A9rique#Images_vectorielles" title="Image numérique">image vectorielle</a>.
</p>
<div class="mw-heading mw-heading2"><h2 id="Liens_externes">Liens externes</h2></div>
<ul><li><a rel="nofollow" class="external text" href="http://docs.oracle.com/javase/tutorial/2d/index.html">Page Java 2D </a> chez <a href="Oracle_(entreprise)" title="Oracle (entreprise)">Oracle</a>.</li></ul>
<ul id="bandeau-portail" class="bandeau-portail"><li><span class="bandeau-portail-element"><span class="bandeau-portail-icone"><span class="noviewer" typeof="mw:File"></span></span> <span class="bandeau-portail-texte">Portail de l’informatique</span> </span></li> </ul></div><!--htdig_noindex--><div><div class="zim-footer">
Cet article est issu de <a class="external text" title="Dernière modification le 2024-09-19" href="https://fr.wikipedia.org/wiki/?title=Java2D&amp;oldid=218750897">Wikipédia</a>. Sauf mention contraire, le texte est disponible sous <a class="external text" href="https://creativecommons.org/licenses/by-sa/4.0/deed.fr">Creative Commons Attribution-Share Alike 4.0</a>. Des conditions supplémentaires peuvent s’appliquer aux fichiers multimédias.
</div>
</div><!--/htdig_noindex--></div>
</div>
</main>
</div>
</div>
</div>
<script src="./_webp_/webpHandler.js"></script>

</body></html>